


var _ua = navigator.userAgent.toLowerCase();
var browser = {
	version: (_ua.match( /.+(?:me|ox|on|rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1],
	opera: /opera/i.test(_ua),
	msie: (/msie/i.test(_ua) && !/opera/i.test(_ua)),
	msie6: (/msie 6/i.test(_ua) && !/opera/i.test(_ua)),
	msie7: (/msie 7/i.test(_ua) && !/opera/i.test(_ua)),
	msie8: (/msie 8/i.test(_ua) && !/opera/i.test(_ua)),
	msie9: (/msie 9/i.test(_ua) && !/opera/i.test(_ua)),
	mozilla: /firefox/i.test(_ua),
	chrome: /chrome/i.test(_ua),
	safari: (!(/chrome/i.test(_ua)) && /webkit|safari|khtml/i.test(_ua)),
	iphone: /iphone/i.test(_ua),
	ipod: /ipod/i.test(_ua),
	iphone4: /iphone.*OS 4/i.test(_ua),
	ipod4: /ipod.*OS 4/i.test(_ua),
	ipad: /ipad/i.test(_ua),
	safari_mobile: /iphone|ipod|ipad/i.test(_ua),
	android: /android/i.test(_ua),
	opera_mobile: /opera mini|opera mobi/i.test(_ua),
	mobile: /iphone|ipod|ipad|opera mini|opera mobi/i.test(_ua),
	mac: /mac/i.test(_ua)
}

var KEY = window.KEY = {
  LEFT: 37,
  UP: 38,
  RIGHT: 39,
  DOWN: 40,
  DEL: 8,
  TAB: 9,
  RETURN: 13,
  ESC: 27,
  PAGEUP: 33,
  PAGEDOWN: 34,
  SPACE: 32,
  HOME: 36,
  END: 35,
  ENTER: 13,
  DELETE: 46,
  BACKSPACE: 8
};



// ���������, ���� �� ������ ��������� CTRL + ENTER
function isCtrlEnter(ev) {
	if (ev.keyCode == 10 || ev.keyCode == 13 && (ev.ctrlKey || ev.metaKey && browser.mac)) {
		return true;
	}
	return false;
}

function isEnter(ev){
	if (ev.keyCode === 13 || ev.keyCode === 10){
		return true;
	}
	return false;
}

function highlightA(classA, idA){
	$("."+classA).each(function(){
		$(this).html($(this).find("b").text() != "" ? $(this).find("b").text() : $(this).text());
	});
	
	$("#"+idA).html("<b>"+$("#"+idA).text()+"</b>");
}

function onAutoFill(el, fn){ // ������ bind ��� ��������� auto fill 
    if (el.addEventListener) { // all browsers except IE before version 9
        el.addEventListener ('DOMAttrModified', fn, false);    // Firefox, Opera, IE
    }else 
    if (el.attachEvent) {  // Internet Explorer and Opera
        el.attachEvent ('onpropertychange', fn);   // Internet Explorer
    }
}

function evListen(el, fn){
	var $el = $(el);
	var oldVal = $el.val();
	var tm = setTimeout(function(){if(oldVal != $el.val()) {oldVal=$el.val();fn()}}, 0);
}

if (console.log == undefined){
	console.log = function(t){} 
}

// $scrollBottom
jQuery.fn.extend({
    scrollBottom: function(speed) {
    	var speed = speed || 0;
        return this.each(function() {
            //var targetOffset = $(this).offset().top + $(this).height();
            //var speed = speed || 1;
            //var scrollTop = targetOffset - $(window).height();
            var scrollTop = 9999;
            $(this).animate({scrollTop: scrollTop}, 
                                   speed);
            });
        }
    });
    
// $outerHTML
jQuery.fn.extend({
	outerHTML: function(){
		return $(this).clone().wrap('<div></div>').parent().html();
	}
});



//���������, ���������� �� ����������
function isset(mixed_var) {
  //original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  var i = 0, argc = arguments.length, argv = arguments, set=true;
  for (i = 0; i< argc; i++){
    if( argv[i] === undefined ){
      set = false;
      break;
    }
  }
  return set;
}

// �������� ������ ��������� ��������, ����������� ������� �� PHP
function trim(str, charlist) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: mdsjack (http://www.mdsjack.bo.it)
    // +   improved by: Alexander Ermolaev (http://snippets.dzone.com/user/AlexanderErmolaev)
    // +      input by: Erkekjetter
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: trim('    Kevin van Zonneveld    ');
    // *     returns 1: 'Kevin van Zonneveld'
    // *     example 2: trim('Hello World', 'Hdle');
    // *     returns 2: 'o Wor'
    charlist = !charlist ? ' \s\xA0' : charlist.replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '\$1');
    var re = new RegExp('^[' + charlist + ']+|[' + charlist + ']+$', 'g');
    return str.replace(re, '');
};

//���������, �������� �� ���������� ��������
function is_array( mixed_var ) {
    // 
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Legaev Andrey
    // +   bugfixed by: Cord
    return ( mixed_var instanceof Array );
}

//���������, �������� �� ���������� ������ (�������� ��� ���� ����� ������)
function empty( mixed_var ) {    
    // 
    // +   original by: Philippe Baumann
 
    return ( mixed_var === "" || mixed_var === 0   || 
             mixed_var === "0" || mixed_var === null  || 
             mixed_var === false  ||  ( is_array(mixed_var) && mixed_var.length === 0 ) );
}

function print_r(arr, level) {
    var print_red_text = "";
    if(!level) level = 0;
    var level_padding = "";
    for(var j=0; j<level+1; j++) level_padding += "    ";
    if(typeof(arr) == 'object') {
        for(var item in arr) {
            var value = arr[item];
            if(typeof(value) == 'object') {
                print_red_text += level_padding + "'" + item + "' :\n";
                print_red_text += print_r(value,level+1);
		} 
            else 
                print_red_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
        }
    } 

    else  print_red_text = "===>"+arr+"<===("+typeof(arr)+")";
    return print_red_text;
}

function intval( mixed_var, base ) {    // Get the integer value of a variable
    var tmp;
    if( typeof( mixed_var ) == 'string' ){
        tmp = parseInt(mixed_var, base || 10);
        if(isNaN(tmp)){
            return false;
        } else{
            return tmp;
        }
    } else if( typeof( mixed_var ) == 'number' ){
        return Math.floor(mixed_var);
    } else{
        return false;
    }
};

// ������� �������� ���������� � ��������� �������
function fnShowProps(obj, objName){
	var objName = objName || "obj";
  var result = "The properties for the " + objName + " object:" + "\n";
  for (var i in obj) {result += i + " = " + obj[i] + "\n";}
  console.log(result);
};


$.fn.heightEdit = function(min_height){
	if(!min_height)
		var min_height = $(this).height();
	$(this).css("overflow-y", "hidden");
	$(this).bind("blur focus click dblclick keypress", function(event){
//		alert(this.scrollHeight + " _ " + min_height);
		if(this.scrollHeight > min_height)
			$(this).height(this.scrollHeight);
		else
			$(this).height(min_height);
		if(($.browser.mozilla || $.browser.safari) && this.scrollHeight == $(this).height()){
			
				var val = this.value;
				var arr = new Array();
				arr = val.match(/\n/g);
				var enter_count = 0;
				enter_count = arr ? arr.length : 0;
				if(enter_count*15+15>min_height)
					$(this).height(enter_count*15+15);
				else
					$(this).height(min_height);				
//				alert(enter_count+" _ ");
//				val = val.replace(/\n/g, "");
//				alert(fnShowProps(val, "text"));
			
//				var last_char_index = $(val).size()-1;
//				if(val.last_char_index)
//				alert("del"); 
//				$(this).height(this.scrollHeight-15);
//			}
//			var val = this.value;
			// ����� ���������� \n ���� ������ - 15px if(\n*15 < this.clientHeight) $(this).height(this.clientHeight-15); !!!!
/*			$(this).height(this.scrollHeight-15);
			$(this).click();*/
		}
			
	});
}

// ��������, ����� ������ ���� ������ ( ������ �� ������� mousedown )
// event - ������� - ������� ������
function buttonalert(event){
 var button;
 if (event.which == null)
 	button = (event.button < 2) ? "LEFT" : ((event.button == 4) ? "MIDDLE" : "RIGHT");
 else
 	button = (event.which < 2) ? "LEFT" : ((event.which == 2) ? "MIDDLE" : "RIGHT");
 alert(button);
 dont(event);
 return false;
}

function dont(event){
 if (event.preventDefault)
 	event.preventDefault();
 else
 	event.returnValue= false;
}

// ���������� true, ���� ������ ����� ��� ������� ������ ���� ( ������ �� ������� mousedown )
// event - ������� - ������� ������
function leftOrMiddleMouseClick(event){
 var button = '';
 if (event.which == null)
 	button = (event.button < 2) ? "LEFT" : ((event.button == 4) ? "MIDDLE" : "RIGHT");
 else
 	button = (event.which < 2) ? "LEFT" : ((event.which == 2) ? "MIDDLE" : "RIGHT");
 dont(event);
 if (button == "LEFT" || button == "MIDDLE") 
 	return true;
 else 
 	return false;
}

function setUserVariable(variableName, variableValue){
	$.post(W_AJAX + "setUserVariable.php", { variableName: variableName, variableValue: variableValue }, function(obj){if(obj.result == "error") alert(obj.error);}, 'json');
}

/*
 *JS функция аналогичная PHP trim
 *@param string s - входная строка
 *@return string - выходная отформотированная строка
 **/
function TrimStr(s) {
  if (typeof s != "undefined"){
    s = s.replace( /^\s+/g, '');
    return s.replace( /\s+$/g, '');
  }
  else{
      return '';
  }
}